<?php

/**
 * 
 * @author Administrator
 *
 */
class ApiBaseController extends Controller {
	public $actionId;
	public function __construct($id,$module=null){
		parent::__construct();
	}
	
	public function beforeAction($action){
		$local_sign = $this->getSign();
		
		$this->actionId  = $action->getId();
		
		// 不参与签名验证的方法  //array('getLastNotice')
		if(!in_array($this->actionId, array('getLastNotice','download'))){
			if($local_sign != $_POST['sign']){
				$json_arr = array('status'=>-1,'msg'=>'check_sign_err','data'=>'' );
				ApiBaseService::doLog($_POST, $json_arr);
				exit(json_encode($json_arr));
			}
			
			if(time() - $_POST['time'] > 600){
				$json_arr = array('status'=>-1,'msg'=>'timeout','data'=>'' );
				ApiBaseService::doLog($_POST, $json_arr);
				exit(json_encode($json_arr));
			}
		}
	

		return parent::beforeAction($action);
	}
	

    
	
	/**
	 * 请求签名
	 * 根据参数名称将所有请求参数按照字母先后顺序排序:key + value .... key + value 对除签名的所有请求参数按key做的升序排列, value为URL Encode之后的值。 
	 * 例如：将foo=1,bar=2,baz=3 排序为bar=2,baz=3,foo=1 参数名和参数值链接后，得到拼装字符串bar2baz3foo1
	 * 再将字符串 拼接当前时间在拼接双方约定的key，拼接完后md5加密，再转化成大写，即 strtoupper(md5(bar2baz3foo1.time().key));
	 * @return type
	 */
	protected function getSign(){
		header("Content-type:text/html;charset=utf-8");
		$key = Yii::app()->params['API_SECRET_KEY'];
		$data = $_POST;
		unset($data['time']);    // 删除这两个参数再来进行排序
		unset($data['sign']);    // 删除这两个参数再来进行排序
		ksort($data);
		foreach($data as $k=>$v){
			$str .= $k.$v;
		}
		$str = $str.$_POST['time'].$key;
		return strtoupper(md5($str));
	}
    
   

}